Het volgende voorbeeld gebruikt gebeurtenissen om seconden af te tellen tijdens een demonstratie van de snelste wedstrijd over 100 meter. De programmacode illustreert alle methoden, eigenschappen en instructies die met de gebeurtenissen te maken hebben, inclusief de instructie Event.
De klasse die een gebeurtenis oproept, is de gebeurtenisbron en de klassen die de gebeurtenis implementeren, zijn de signaalopvangers. Een gebeurtenisbron kan meerdere signaalopvangers hebben voor de gebeurtenissen die door die bron worden gegenereerd. Als de klasse de gebeurtenis oproept, wordt die gebeurtenis voor elke klasse opgeroepen die gebeurtenissen voor dat exemplaar van het object ontvangt.
Het voorbeeld maakt gebruik van een formulier (Form1
) met een knop (Command1
), een label (Label1
) en twee tekstvakken (Text1
en Text2
). Als u op de knop klikt, verschijnt in het eerste tekstvak "Vanaf nu" en worden in het tweede tekstvak seconden geteld. Als de tijd (9,84 seconden) helemaal is verstreken, verschijnt in het eerste tekstvak "Tot nu" en staat de secondenteller op "9,84"
De programmacode voor Formulier1
geeft de begin- en eindstatus van het formulier op. De code bevat ook de programmacode die wordt uitgevoerd als gebeurtenissen worden opgeroepen.
Option Explicit
Private WithEvents mText As TimerState
Private Sub Opdracht1_Click()
Text1.Text = "Vanaf nu"
Text1.Refresh
Text2.Text = "0"
Text2.Refresh
Call mText.TimerTask(9,84)
End Sub
Private Sub Form_Load()
Opdracht1.Caption = "Klik om de timer te starten"
Text1.Text = ""
Text2.Text = ""
Label1.Caption = "De snelste 100 meter duurde maar zo lang:"
Set mText = New TimerState
End Sub
Private Sub mText_ChangeText()
Text1.Text = "Tot nu"
Text2.Text = "9,84"
End Sub
Private Sub mText_UpdateTime(ByVal dblJump As Double)
Text2.Text = Str(Format(dblJump, "0"))
DoEvents
End Sub
De resterende programmacode staat in een klassenmodule met de naam TimerState. De instructies Event declareren de procedures die worden gestart als gebeurtenissen worden opgeroepen.
Option Explicit
Public Event UpdateTime(ByVal dblJump As Double)
Public Event ChangeText()
Public Sub TimerTask(ByVal Duration As Double)
Dim dblStart As Double
Dim dblSecond As Double
Dim dblSoFar As Double
dblStart = Timer
dblSoFar = dblStart
Do While Timer < dblStart + Duration
If Timer - dblSoFar >= 1 Then
dblSoFar = dblSoFar + 1
RaiseEvent UpdateTime(Timer - dblStart)
End If
Loop
RaiseEvent ChangeText
End Sub